package message

import "time"

//预先定义一些消息类型常量

const (
	LoginMesType            = "LoginMes"
	LoginResMesType         = "LoginResMes"
	RegisterMesType         = "RegisterMes"
	RegisterResMesType      = "RegisterResMes"
	NotifyUserStatusMesType = "NotifyUserStatusMes"
	SmsMesType              = "SmsMes"
	PrivateMesType          = "PrivateMes"
)

const (
	UserOnline = iota
	UserOffline
)

//序列化为json时需要小写属性名
type Message struct {
	Type string `json:"type"`
	Data string `json:"data"`
}

//定义data的序列化数据
type LoginMes struct {
	UserId   int    `json:"userId"`
	UserPwd  string `json:"userPwd"`
	UserName string `json:"userName"`
}

type LoginResMes struct {
	Code     int    `json:"code"`  //返回状态码 500 表示用户id 已经被占用  401 id不合规 402 密码不合规 403 用户名不合规  200 表示用户登登录成功
	Error    string `json:"error"` //返回错误消息
	UserIds  []int
	UserName string `json:"userName"`
}

type RegisterMes struct {
	User User `json:"user"`
}

type RegisterResMes struct {
	Code  int    `json:"code"` //返 回状态码  400 表示该用户已经被占用 200 表示用户注册成功
	Error string `json:"error"`
}

//用户状态信息发送结构
type NotifyUserStatusMes struct {
	UserId int `json:"userId"`
	Status int `json:"status"`
}

//添加一个SmsMes 发送的消息
type SmMes struct {
	Content string `json:"content"` //消息内容
	User           //使用匿名的结构体  相当于继承

}

//SmsResMes 发送消息关于服务器的返回
type PrivateMes struct { //私发消息的结构 是什么 到哪去 从哪来
	SendUser  User
	RecUserId int    `json:"recUserId"` //这里接收者的信息不需要太多
	Content   string `json:"content"`
}

//单独的离校消息 额外声明时间变量 方便查看历史消息的时间
type HistoryMes struct {
	PrivateMes
	Sendtime time.Time `json:"sendTime"`
}

type CachMes struct {
	AllOfflineMes []HistoryMes `json:"allOfflineMes"`
}
